require "../core.pl";
require "../config.pl";

use CGI::Carp qw ( fatalsToBrowser );
use CGI;
use Authen::Captcha;
use Digest::MD5 qw( md5_hex );
use Switch;

sub do_register
{
	use Digest::MD5 qw(md5 md5_hex md5_base64);
	$pass_md5 = md5_hex($_[1]);
	$vcard="<vCard xmlns=\'vcard-temp\'><FN>@_[0]</FN><N><FAMILY>$_[0]</FAMILY></N><NICKNAME>$_[3]</NICKNAME><EMAIL>$_[4]</EMAIL><URL>$_[8]</URL><BDAY>$_[6]</BDAY><DESC>$_[12]</DESC></vCard>";
	
	$ath = $dbcnx->prepare(qq{SELECT * FROM reg WHERE name='$_[3]'});
	$ath->execute();
	$numrows = $ath->rows;
	
	$ath_via = $dbcnx_via->prepare(qq{SELECT * FROM users WHERE username = '$_[3]'});
	$ath_via->execute();
	$numrows_via = $ath_via->rows;
	
	if (($numrows >= 1) or ($numrows_via >= 1))
	{
		$ath->finish();
		$dbcnx->disconnect();
		
		$ath_via->finish();
		$dbcnx_via->disconnect();
		
		log_write(qq/ $_[9]: Пытался зарегистрироваться пользователь "$_[3]", e-mail: "$_[4]", но такой уже есть! (IP: $ENV{"REMOTE_ADDR"} Agent: $ENV{"HTTP_USER_AGENT"}) /);
		return 0;
	}
	else 
	{
		$dbcnx->do(qq{INSERT INTO reg VALUES (0,'@_[3]', '@_[1]', '$pass_md5')}) or die("Ошибка с сервером xepec.ru #1");
		#$dbcnx_via->do(qq{INSERT INTO users VALUES ('@_[3]', '@_[1]')}) or die("Ошибка с сервером jabber.xepec.ru #2");
		
		
		$dbcnx->do(qq{INSERT INTO username VALUES (0, '@_[0]', @_[2], '@_[3]', '@_[4]','@_[5]','@_[6]','@_[7]','@_[8]','@_[9]','@_[10]',@_[11],'@_[12]','@_[13]','@_[14]','@_[15]','@_[16]')}) or print qq{INSERT INTO username VALUES (0, '@_[0]', @_[2], '@_[3]', '@_[4]','@_[5]','@_[6]','@_[7]','@_[8]','@_[9]','@_[10]',@_[11],'@_[12]','@_[13]','@_[14]','@_[15]','@_[16]')}; #die("Ошибка с сервером xepec.ru #3");
#		$dbcnx_via->do(qq{INSERT INTO vcard VALUES ('@_[3]', '$vcard')}) or die("Ошибка с сервером jabber.xepec.ru #4");

		# Подготовка к первой авторизации
		$xepec_nic_cookie = "xepec_nic $_[3] +3";
		$xepec_pass_cookie = "xepec_pass $pass_md5 +3";
		set_cookie($xepec_nic_cookie,$xepec_pass_cookie);
		
		
		#Получаем id пользователя для создания его папки
		$ath = $dbcnx->prepare(qq{SELECT id FROM reg WHERE name='$_[3]' and md5='$pass_md5'});
 		$ath->execute();
 		$auth_id = $ath->fetchrow_array();
		
		# Если все выше сделанное правельно создаем папку
		if (!$auth_id)
		{
			return 0;
		}
		else
		{
			# Создаем папку пользователя
			mkdir($DOC_ROOT."/usr/".$auth_id ,0755) || "Error: $!";
			
			# Все удачно завершаем функцию
			return $auth_id;
		}
	}
	
}

my $cgi = new CGI;
$bdate = $cgi->param("byear")."-".$cgi->param("bmonth")."-".$cgi->param("bday")."T00:00:00+00:00";
my $ava_file = $cgi->param("filename");
if(!$ava_file)
{
	$ava_db = "0";
}
else
{
	$ava_db = "1";
}

################################################## Капча #############################################
my $cap_data_folder = "$DOC_ROOT/tmp/captcha"; # Здесь будет находиться текстовый файл с кодами CAPTCHA
my $cap_out_folder = "$DOC_ROOT/tmp/captcha/img"; # Тут расположены проверочные изображения CAPTCHA

my $captcha = Authen::Captcha->new( data_folder => $cap_data_folder, output_folder => $cap_out_folder, );

my $cap_input_value =  $cgi->param("captcha");

my $md5sum = md5_hex($cap_input_value); # Вычсляем md5 хэш для пользовательского ввода
my $result_captcha = $captcha->check_code($cap_input_value,$md5sum);
################################################## Капча #############################################

############################################Возникла проблема при проверке ника ######################

if ($cgi->param("nic") !~ /^[a-z0-9\.\-_]+$/i)
{
	#print $nic;
	$nic_check = 0;
}
else
{
	#print $nic;
	$nic_check = 1;
}

######################################################################################################
$nic = lc($cgi->param("nic")); # Переведем значение в нижний регистр
################################################## Массив с данными передаюшимися сюди постом #############################################
#	         0                   1                    2       3    4                   5                  6      7                    8                 9              10             11  12                   13  14                     15                    16
@reg_data = ($cgi->param("name"),$cgi->param("pass1"),$ava_db,$nic,$cgi->param("mail"),$cgi->param("sex"),$bdate,$cgi->param("phone"),$cgi->param("im"),date_iso8601(),date_iso8601(),"0",$cgi->param("about"),"0",$cgi->param("interes"),$cgi->param("citata"),"0");
#@reg_data = ("sos_test",$cgi->param("pass1"),$ava_db,$cgi->param("nic"),"email\@sdas.yu","0",$bdate,"0","0",$bdate,$bdate,"0","0","0","0","0","0" );
#username | id          | name                       | foto   | nic            | email            | sex  | bday             | phone              | im      | time     | last_time  | pepyka |          about  | status          | interes        | citata     | groups  |

# reg:    | id          | name               | passw	(| md5|)
################################################## Массив с данными передаюшимися сюди постом #############################################

############################################################## Начисление пепяки ##########################################################

$pepyka = 10;#Стартовое значение для пепяки
$i = 0;
while($i<16)
{
	#отдельно рассматривать случаи
	if($i == 7)# Рассмотрим телефоны
	{
		@phone = split (/,/,$reg_data[7]);
		foreach (@phone)
		{
			@phone_item = split (/:/,$_);
			$phone_type = shift @phone_item;# Выбираем из массива только название типа телефона
			$phone_numder = shift @phone_item;# Выбираем из массива только оставшиеся элемент, то есть цифры номера
			# Далее начисляем пепяку для каждого типа, если он указан
			switch ($phone_type)
			{
				case "phone_mob"
				{
					$pepyka = $pepyka +20 if($phone_numder);
				}
				case "phone_home"
				{
					$pepyka = $pepyka +10 if($phone_numder);
				}
				case "phone_work"
				{
					$pepyka = $pepyka +5 if($phone_numder);
				}
				case "phone_other"
				{
					$pepyka = $pepyka +5 if($phone_numder);
				}
			}
		}
	}
		elsif (($i == 6) and ($reg_data[6] eq "--T00:00:00+00:00"))#Если дата рождения не указанна
		{
			 # При этом условие ничего не делать
			}
			elsif(($i == 2) or ($i == 9) or ($i == 10) or ($i == 11) or ($i == 13) or ($i == 16)) #Исклычить начисление пепяки за дату регистрации и последнее посешение, т.к. они не равны нулю
			{
			# При этих типах значений ничего не делать
			$pepyka = $pepyka;
				}
				elsif($reg_data[$i])# Если значение заданно(остальсь только указанные в форме)
				{
				$pepyka = $pepyka +10; #Если пользователь не ввел инфу то шыш
				}
	$i++;
}
if($ava_db == 1){$pepyka = $pepyka +100;}# +100 если есть фотка
#$pepyka = $pepyka + @reg_data;

$reg_data[11] = $pepyka;

#min = 50;
#max = 250;
############################################################## Начисление пепяки ##########################################################
if($cgi->param("pass1") and $nic_check and $cgi->param("mail") and $cgi->param("sex") and $result_captcha == "1")
{
	$reg_id = do_register(@reg_data);
	if ($reg_id and $ava_db == 1)
	{
		my $ava_full = "$DOC_ROOT/usr/$reg_id/userpic.png";
		open(FILE, ">$DOC_ROOT/usr/$reg_id/userpic.png") or die $!;
		while(<$ava_file>)
		{
			print FILE $_;
		}
		#Бага и функцией resizeimg()
		#$ava_resize = resizeimg($ava_full, "$DOC_ROOT/usr/$reg_id/userpic-small.png", 250);
		#if (!$ava_resize)
		#{
			symlink ($ava_full, "$DOC_ROOT/usr/$reg_id/userpic-small.png");
		#}
		$result="1";
	}
	else
	{
		$result="0";
	}
}
else
{
	$result="0";
}
print "Content-Type: text/html; charset=utf-8\n\n";
print qq{
<script language="javascript" type="text/javascript">
   window.top.window.stopUpload($result);
</script>
};
